iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 2
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 2

[鐵人賽第02天] 單引號、雙引號與跳脫字元

  • 分享至 

  • xImage
  •  

今天先來講 Shell 或是 ShellScript 的基本。

本來沒又打算要寫這篇,可是總是會有人問我「為什麼要跳脫」,甚至聽到朋友在抱怨學校教授再問「為什麼要跳脫」,因此我決定花一個篇幅來寫寫,為什麼要跳脫!!誰再問為什麼要跳脫,我一定拿這篇文砸下去(怒)。

有在打指令應該都知道指令中間插入「空白」會讓後面的應用程式決的這是兩個參數(arg),像是身為開發者常常用到的 git push origin new-mastergit 會知道他被呼叫了,傳入三個參數分別是 pushoriginnew-master ,這個範例什麼問題。

但是如果今天有個檔案叫做 My Document.txt 而我要刪除他呢?如果直接下 rm My Document.txtrm 就會知道他被執行,參數一是 My 、參數二是 Document.txt,於是 rm 開始找 My ,準備把 My 刪掉……恩找不到檔案;接著處理參數二的 Document.txt ,一樣找不到,所以最後噴兩個錯誤表示檔案找不到無法刪掉。

等等這不對,我們要刪除的檔案叫做 My Document.txt ,怎麼變成我要刪除兩個檔案了!對,因為「空白」有特殊功能(分隔不同參數),而現在我們不要這些特殊功能,所以這時候就要跳脫讓這些「空白」就只是個空白,而不是拿來切割參數的特殊字元。

在 Unix Like 的 Shell 下,有以下幾種跳脫方式:

  • 用在特殊字元前面加上 \
  • "" 把字串包起來
  • '' 把字串包起來

這次我們要刪除 My Document.txt ,用上面三種方法都可以,也就是以下三種指令都可以正常把這個「有空白」的檔案刪掉:

  • rm My\ Document.txt
  • rm "My Document.txt"
  • rm 'My Document.txt'

至於雙引號 "" 與單引號 '' 的差異,會有機會寫到的!今天就講這個為什麼要「跳脫」與 Shell 裡面跳脫的用法……蛤,那個誰又來問我問我跳脫了?!


我是誰?
我是 dd-han ,可以叫我呆翰。是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第01天] 什麼是 Shell ,有哪些 Shell
下一篇
[鐵人賽第03天] 變數與 echo
系列文
30 天的 ShellScript 教室解決開發者的困擾23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言